from typing import TYPE_CHECKING, Any, Optional, Tuple, Union

if TYPE_CHECKING:
    from urllib3.connectionpool import ConnectionPool

class HTTPError(Exception): ...
class HTTPWarning(Warning): ...

class PoolError(HTTPError):
    pool: ConnectionPool
    def __init__(self, pool: ConnectionPool, message: str) -> None: ...
    def __reduce__(self) -> Union[str, Tuple[Any, ...]]: ...

class RequestError(PoolError):
    url: str
    def __init__(self, pool: ConnectionPool, url: str, message: str) -> None: ...
    def __reduce__(self) -> Union[str, Tuple[Any, ...]]: ...

class SSLError(HTTPError): ...
class ProxyError(HTTPError): ...
class DecodeError(HTTPError): ...
class ProtocolError(HTTPError): ...

ConnectionError: ProtocolError

class MaxRetryError(RequestError):
    reason: str
    def __init__(
        self, pool: ConnectionPool, url: str, reason: Optional[str]
    ) -> None: ...

class HostChangedError(RequestError):
    retries: int
    def __init__(self, pool: ConnectionPool, url: str, retries: int) -> None: ...

class TimeoutStateError(HTTPError): ...
class TimeoutError(HTTPError): ...
class ReadTimeoutError(TimeoutError, RequestError): ...
class ConnectTimeoutError(TimeoutError): ...
class EmptyPoolError(PoolError): ...
class ClosedPoolError(PoolError): ...
class LocationValueError(ValueError, HTTPError): ...

class LocationParseError(LocationValueError):
    location: str
    def __init__(self, location: str) -> None: ...

class ResponseError(HTTPError):
    GENERIC_ERROR: Any
    SPECIFIC_ERROR: Any

class SecurityWarning(HTTPWarning): ...
class InsecureRequestWarning(SecurityWarning): ...
class SystemTimeWarning(SecurityWarning): ...
class InsecurePlatformWarning(SecurityWarning): ...
